今天要寫一支簡單的程式來測試 CICD。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World from Golang!")
}
func main() {
http.HandleFunc("/", handler)
fmt.Println("Server starting on port 8080...")
http.ListenAndServe(":8080", nil)
}
package main: 定義包名。可執行程序的主包必須叫 main。import: 導入所需的包:
fmt: 用於格式化輸出net/http: 用於創建 HTTP 服務器func handler: 處理 HTTP 請求的函數:
w http.ResponseWriter: 用於寫入 HTTP 響應r *http.Request: 包含有關傳入 HTTP 請求的信息fmt.Fprintf(w, "Hello, World from Golang!"): 將問候語寫入 HTTP 響應func main(): 程序的入口點http.HandleFunc("/", handler): 將根路徑 ("/") 的請求映射到 handler 函數http.ListenAndServe(":8080", nil): 啟動 HTTP 服務器,監聽 8080 端口FROM golang:1.16-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o main .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
構建階段:
FROM golang:1.16-alpine AS builder: 使用 Golang Alpine 映像作為基礎,命名為 "builder"WORKDIR /app: 設置工作目錄為 /appCOPY . .: 複製所有文件到容器的 /app 目錄RUN go build -o main .: 編譯 Go 程序,生成 "main" 可執行文件運行階段:
FROM alpine:latest: 使用輕量級的 Alpine Linux 作為基礎映像WORKDIR /root/: 設置工作目錄為 /root/COPY --from=builder /app/main .: 從 builder 階段複製編譯好的可執行文件EXPOSE 8080: 聲明容器將使用 8080 端口 (僅作為文檔作用)CMD ["./main"]: 定義容器啟動時運行的命令這個 Dockerfile 使用多階段構建技術,有效減小最終映像的大小,只包含運行應用所需的最小組件。